package tech.aistar.corejava.day11.homework;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:
 * @date 2019/7/30 0030
 */
public class BookDaoImpl implements IBookDao{
    //模拟一些初始化的数据 - 未来不需要 - 此处的数据都是从DB中获取的

    //ArrayList - 以后都是对DB进行增删操作,我们只是将查询出来的数据用集合容器保存 - 偏查询.
    //LinkedList -需要对头尾操作比较频繁,并且会经常对数据进行增删操作的 - 实际使用情况比较少.
    //HashSet - 需要存档的数据必须保证唯一性的,比如订单.

    //利用构造块来初始化一些图书的数据

    //IBookDao dao = new BookDaoImpl();//-存在于某个方法中

    //java.util.Vector - 线程安全的

    //ArrayList是一个线程不安全的
    private List<Book> books = new ArrayList<>();

    //private static Vector<Produce> books = new Vector<Produce>();

    //private static List<Produce> boods = new ArrayList<>();
    //private static StringBuilder builder = new StringBuilder();

    public BookDaoImpl(){
        books.add(new Book(1,"西a游记","吴承恩",100.0));
        books.add(new Book(2,"水浒传","施耐庵",150.0));
        books.add(new Book(3,"红a楼梦","曹雪芹",80.0));
        books.add(new Book(4,"三国演义","罗贯中",70.0));
        books.add(new Book(5,"等a一个人的咖啡","九把刀",90.0));
        books.add(new Book(6,"毛泽东讲义","毛润之",120.0));
    }

    @Override
    public void save(Book b) {
        books.add(b);
    }

    /**
     * 根据图书名称来进行模糊查询
     * @param bookName
     * @return
     */
    @Override
    public List<Book> findByBook(String bookName) {
        //判断bookName是否传入,如果没有传入,则查询所有的
        if(null == bookName || bookName.trim().length()==0){
            return books;
        }
        //遍历books
        List<Book> temp = new ArrayList<>();

        Iterator<Book> iter = books.iterator();
        while(iter.hasNext()){
            Book b = iter.next();
            if(b.getBookName().contains(bookName)){
                temp.add(b);
            }
        }
        //return temp;
        return temp;
    }

    @Override
    public void delById(int id) {

    }

    /**
     * 删除...
     * @param price
     */
    @Override
    public void delByPrice(double price) {
        //推荐 - 直接使用集合的迭代器对象的删除
//        Iterator<Produce> iter = books.iterator();
//
//        while(iter.hasNext()){
//            Produce b = iter.next();
//            if(b.getPrice()>price){
//                //books.remove(b);
//                iter.remove();
//            }
//        }

        //拓展
//        books.removeIf(new Predicate<Produce>() {
//            @Override
//            public boolean test(Produce book) {
//                return book.getPrice()>price;
//            }
//        });
        books.removeIf(b-> b.getPrice()>price);
    }
}
